﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using App.Modelo.Interfaces;
using App.SolInf.Modelo;

namespace App.SolInf.Controlador
{
    public class InstalarDatosDemo
    {
        public void Run(IRepositorio dbh)
        {
            var usuarios = dbh.GetAll<App.Modelo.Usuario>();
            var usuario = usuarios.First();

            // clientes 
            var Cli1 = new Cliente
                           {
                               RazonSocial = "Distribuidora Sur",
                               Domicilio = new Domicilio
                                               {
                                                   Calle = "9 de julio",
                                                   Numero = "639",
                                                   Departamento = "A",
                                                   Localidad = new Ubicacion("Pergamino", "2700", "Bs As", "Argentina")
                                               },
                               Email = "distribuidora@sur.com",
                               Documento = new Documento("CUIT", "23-315422111-9"),
                               Telefono1 = "0341 3154222",
                           };

            var Cli2 = new Cliente
                           {
                               RazonSocial = "La Perla SA",
                               Domicilio = new Domicilio
                                               {
                                                   Calle = "Paraguay",
                                                   Numero = "1456",
                                                   Piso = "7",
                                                   Departamento = "C",
                                                   Localidad = new Ubicacion("Rosario", "2000", "Santa Fe", "Argentina")
                                               },
                               Email = "laperla@hotmail.com",
                               Documento = new Documento("CUIT", "23-33322111-9"),
                               Telefono1 = "0341 3223322",
                           };


            var micros = new CategoriaProducto("Microprocesadores");
            var intel = new Marca("Intel");
            var amd = new Marca("AMD");
            var pentiumII = new Producto()
                                {
                                    Categoria = micros,
                                    Marca = intel,
                                    Descripcion = "Intel Pentium II 450Mhz",
                                    Costo = 89.50,
                                    Ganancia = 1.5
                                };
            var pres1 = new Presupuesto()
                            {
                                Cliente = Cli1,
                                FechaAlta = DateTime.Now,
                                Vendedor = usuario,
                                LineasPresupuesto = new List<LineaPresupuesto>()
                                                        {
                                                            new LineaPresupuesto()
                                                                {
                                                                    Producto = pentiumII,
                                                                    Cantidad = 2,
                                                                    PrecioUnitario = pentiumII.Precio
                                                                }
                                                        }
                            };

            dbh.SaveObject(micros);
            dbh.SaveObject(intel);
            dbh.SaveObject(amd);

            var marcas = from nom in "HP Genius Epson Samsung Lenovo Memorex".Split(' ')
                         select new Marca() {Descripcion = nom};

            foreach (var marca in marcas)
                dbh.SaveObject(marca);

            var categorias = from nom in "Memorias Motherboard Discos Impresoras Monitores Teclados".Split(' ')
                             select new CategoriaProducto() {Descripcion = nom};

            foreach (var categoriaProducto in categorias)
                dbh.SaveObject(categoriaProducto);

            var productos = _procesadores(micros, amd, intel);

            foreach (var pro in productos)
                dbh.SaveObject(pro);


            dbh.SaveObject(Cli1);
            dbh.SaveObject(Cli2);
            dbh.SaveObject(pentiumII);
            dbh.SaveObject(pres1);


            /**
             * stock
             */

            foreach (
                var m in
                    "El Beso,Carlona,Aqua Di Marte,Distribuidora Sur,Aceros SA,InoxPreK,SINTI,Nando Manzana S.A".Split(
                        ','))
                dbh.SaveObject(new Proveedor{RazonSocial = m});

            var proveedores = dbh.GetAll<Proveedor>();

            dbh.SaveObject(new Movimiento()
                               {
                                   Empleado = usuarios.GetRandom(),
                                   Fecha = DateTime.Now.Subtract(new TimeSpan(60, 0, 0, 0)),
                                   Detalle = new Compra()
                                                 {
                                                     Proveedor = proveedores.GetRandom(),
                                                     Lineas = new List<LineaCompra>()
                                                                  {
                                                                      new LineaCompra(productos.GetRandom(), 3, 120),
                                                                      new LineaCompra(productos.GetRandom(), 14, 123),
                                                                      new LineaCompra(productos.GetRandom(), 15, 327),
                                                                      new LineaCompra(productos.GetRandom(), 7, 85)
                                                                  }
                                                 },
                                   Comentario = "Compra de procesadores",

                                   Lineas = new List<LineaMovimiento>()
                                                {
                                                    new LineaMovimiento(productos.GetRandom(), 3),
                                                    new LineaMovimiento(productos.GetRandom(), 14),
                                                    new LineaMovimiento(productos.GetRandom(), 15),
                                                    new LineaMovimiento(productos.GetRandom(), 7)
                                                }
                               });

            dbh.SaveObject(new Movimiento()
                               {
                                   Empleado = usuarios.GetRandom(),
                                   Fecha = DateTime.Now.Subtract(new TimeSpan(40, 0, 0, 0)),
                                   Comentario = "Compra de 100 procesadores",
                                   Detalle = new AjusteStock()
                                                 {
                                                     Motivo = "Ajuste inicial del stock",

                                                     Documentacion = new Documentacion()
                                                                         {
                                                                             Fecha =
                                                                                 DateTime.Now.Subtract(new TimeSpan(10,
                                                                                                                    0, 0,
                                                                                                                    0)),
                                                                             Numero = "0001-00108922",
                                                                             Tipo = TipoDocumentacion.Factura
                                                                         },
                                                 },
                                   Lineas = new List<LineaMovimiento>()
                                                {
                                                    new LineaMovimiento(productos.GetRandom(), 20),
                                                    new LineaMovimiento(productos.GetRandom(), 10),
                                                    new LineaMovimiento(productos.GetRandom(), 15)
                                                }
                               });

            dbh.SaveObject(new Movimiento()
                               {
                                   Empleado = usuarios.GetRandom(),
                                   Detalle = new Compra()
                                                 {
                                                     Documentacion = new Documentacion()
                                                                         {
                                                                             Fecha =
                                                                                 DateTime.Now.Subtract(new TimeSpan(15,
                                                                                                                    0, 0,
                                                                                                                    0)),
                                                                             Numero = "0001-00101009",
                                                                             Tipo = TipoDocumentacion.Remito
                                                                         },
                                                     Proveedor = proveedores.GetRandom()
                                                 },
                                   Fecha = DateTime.Now.Subtract(new TimeSpan(50, 0, 0, 0)),
                                   Comentario = "Compra de procesadores",

                                   Lineas = new List<LineaMovimiento>()
                                                {
                                                    new LineaMovimiento(productos.GetRandom(), 3),
                                                    new LineaMovimiento(productos.GetRandom(), 12),
                                                    new LineaMovimiento(productos.GetRandom(), 15),
                                                    new LineaMovimiento(productos.GetRandom(), 7)
                                                }
                               });


        }

        private Producto[] _procesadores(CategoriaProducto micros, Marca amd, Marca intel)
        {
            var str = @"Intel Core i7 X 980 @ 3.33GHz 10,201 
Intel Xeon X5680 @ 3.33GHz 9,896 
Intel Xeon X5670 @ 2.93GHz 9,652 
Intel Xeon W3680 @ 3.33GHz 8,577 
Intel Xeon X5660 @ 2.80GHz 7,767 
Intel Xeon X5650 @ 2.67GHz 7,530 
Intel Xeon W3570 @ 3.20GHz 6,993 
Intel Core i7 975 @ 3.33GHz 6,978 
Intel Xeon W5590 @ 3.33GHz 6,924 
Intel Xeon X5355 @ 2.66GHz 3,519 
Intel Core i7 820QM @ 1.73GHz 3,515 
AMD Phenom II X4 B35 3,480 
Intel Core i5 K 655 @ 3.20GHz 3,452 
Intel Xeon X3320 @ 2.50GHz 3,441 
Intel Core2 Quad Q9100 @ 2.26GHz 3,431 
AMD Phenom II X4 925 3,413 
Intel Xeon E5410 @ 2.33GHz 3,398 
Intel Core i3 550 @ 3.20GHz 3,393 
Intel Xeon E5506 @ 2.13GHz 3,391 
Intel Core2 Quad Q6700 @ 2.66GHz 3,384 
AMD Athlon II X4 635 3,380 
AMD Athlon II X4 630 3,358 
Pentium Dual-Core E6500 @ 2.93GHz 2,047 
Intel Core2 Duo E8235 @ 2.80GHz 2,036 
Intel Core i3 M 350 @ 2.27GHz 2,012 
AMD Phenom 8450e Triple-Core 2,011 
Intel Core2 Duo E7500 @ 2.93GHz 2,010 
Intel Core2 Duo T9600 @ 2.80GHz 2,005 
Intel Core i3 M 330 @ 2.13GHz 1,998 
Intel Core2 Duo E8335 @ 2.93GHz 1,998 
Intel Xeon 5160 @ 3.00GHz 1,985 
AMD Phenom 8250 Triple-Core 1,984 
Intel Core2 Extreme X9000 @ 2.80GHz 1,975 
Intel Core2 Duo P9600 @ 2.66GHz 1,975 
Intel Core2 E7600 @ 3.06GHz 1,955 
Intel Core2 Duo E8300 @ 2.83GHz 1,953 
AMD Phenom 8600B Triple-Core 1,946 
Intel Core2 Duo E8200 @ 2.66GHz 1,943 
AMD Phenom 9100e Quad-Core 1,941 
AMD Phenom 8650 Triple-Core 1,939 
Pentium Dual-Core E6300 @ 2.80GHz 1,926 
Intel Pentium G6950 @ 2.80GHz 1,922 
Intel Core2 Duo E6850 @ 3.00GHz 1,913 
Intel Core2 Duo @ 2.53GHz 1,913 
Intel Core2 Duo E7400 @ 2.80GHz 1,911 
Intel Xeon W3505 @ 2.53GHz 1,903 
Intel Core2 Duo T9550 @ 2.66GHz 1,894 
Intel Core2 Duo @ 3.00GHz 1,891 
AMD Phenom II X2 550 1,882 
AMD Phenom 8550 Triple-Core 1,879 
Intel Core2 Duo P8800 @ 2.66GHz 1,873 
AMD Athlon II X3 405e 1,869 
AMD Athlon II X3 400e 1,868 
Intel Core2 X6800 @ 2.93GHz 1,858 
Intel Core2 Duo T9500 @ 2.60GHz 1,845 
Intel Core2 Duo E8135 @ 2.66GHz 1,831 
AMD Athlon II X2 255 1,830 
Intel Xeon W3503 @ 2.40GHz 1,822 
Intel Core2 Duo E7300 @ 2.66GHz 1,813 
Intel Xeon E5503 @ 2.00GHz 1,812 
Pentium Dual-Core E5400 @ 2.70GHz 1,805 
Intel Core2 Duo E8335 @ 2.66GHz 1,798 
Intel Core2 Duo P8700 @ 2.53GHz 1,798 
Dual Core AMD Opteron 290 1,790 
AMD Athlon 64 X2 Dual Core 6400+ 1,777";
            var rnd = new Random();
            return (from s in str.Split('\n')
                    select new Producto()
                               {
                                   Descripcion = s.Trim(),
                                   Marca = s.Contains("AMD") ? amd : intel,
                                   Costo = Math.Round(rnd.NextDouble()*100, 2),
                                   Ganancia = 1.5,
                                   Categoria = micros,
                                   StockMinimo = 3,
                                   StockMaximo = 10
                               }
                   ).ToArray();

        }
    }
}
